package com.itlong.cloud.dao;

import com.itlong.cloud.POJO.PO.DeviceElevatorFloorConfigPO;
import com.itlong.cloud.POJO.VO.property.CloudElevatorFloorInfoVO;
import com.itlong.cloud.POJO.VO.property.PropertyDeviceElevatorConfigVO;
import com.itlong.cloud.POJO.VO.property.PropertyElevatorFloorGetVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *    电梯楼层映射持久层
 * </desc>
 *
 * @createDate 2017/10/12
 */

@Mapper
@Repository
public interface IDeviceElevatorFloorConfigDao extends IAbstractBaseDao<DeviceElevatorFloorConfigPO> {

    /**
     * <desc>
     *      通过deviceUnique和logicalFloor查询naturalFloor
     * <desc/>
     * @param   floorParam  查询参数集
     * @return  String  查询的naturalFloor
     * @author Biao.R
     * @createDate 2017/10/12
     */
    List<String> getNaturalFloor(Map<String, Object> floorParam);

    /**
     * <desc>
     *      通过楼层映射表权限标识查询逻辑楼层名称（批量）
     * <desc/>
     * @param  floorParam  查询参数集
     * @return  查询出的楼层映射表对象集
     * @author Biao.R
     * @createDate 2017/11/20
     */
    List<DeviceElevatorFloorConfigPO> getByNaturalFloors(Map<String, Object> floorParam);

    /**
     * <desc>
     *      通过电梯楼层映射信息查询电梯楼层映射信息实体类
     * <desc/>
     * @param  deviceElevatorFloorConfigPO 电梯楼层映射信息
     * @return  DeviceElevatorFloorConfigPO 电梯楼层映射信息实体类
     * @author zhangs
     * @createDate 2017/11/20
     */
    List<DeviceElevatorFloorConfigPO> getElevatorFloorConfigByPO(DeviceElevatorFloorConfigPO deviceElevatorFloorConfigPO);

    /**
     * <desc>
     *      保存电梯楼层映射信息
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/11/20
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      更新电梯楼层映射信息
     * </desc>
     * @param deviceElevatorFloorConfigPO 电梯楼层映射信息
     * @return
     * @author zhangs
     * @createDate 2017/10/11
     */
    Integer update(DeviceElevatorFloorConfigPO deviceElevatorFloorConfigPO);



    /**
     * <desc>
     *      批量保存楼层对应信息。
     * <desc/>
     *
     * @param  list 楼层对用信息列表
     * @return
     * @author shengen.T
     * @createDate 2017/11/22
     */
    Integer saveBatch(@Param("list") List<DeviceElevatorFloorConfigPO> list);

    /**
     * <desc>
     *      批量更新楼层对应信息。
     * <desc/>
     *
     * @param  list 楼层对用信息列表
     * @return
     * @author shengen.T
     * @createDate 2017/11/22
     */
    Integer updateBatch(@Param("list") List<DeviceElevatorFloorConfigPO> list);

     /**
      * <desc>
      *      批量删除楼层对应表。
      * <desc/>
      *
      * @param  Ids
      * @return
      * @author shengen.T
      * @createDate 2017/11/22
      */
    Integer deleteBatch(@Param("Ids") List<String> Ids);


    /**
     * <desc>
     *      获取原始设备楼层对应表信息。
     * <desc/>
     *
     * @param  deviceUnique 设备唯一编号
     * @return
     * @author shengen.T
     * @createDate 2017/11/22
     */
    List<DeviceElevatorFloorConfigPO>  getFloorConfigIdList(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一码获取设备的起始楼层。
     * <desc/>
     *
     * @param  deviceUnique 设备唯一编号
     * @return
     * @author Juguang.S
     * @createDate 2018/08/27
     */
    Integer  getElevatorFloorNo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一码删除楼层映射表
     * <desc/>
     * @param  deviceUnique     要删除的设备唯一码
     * @author Biao.R
     * @createDate 2017/11/27
     */
    void delByDeviceUnique(@Param("deviceUnique") String deviceUnique);


    /**
     * <desc>
     *      批量更新楼层映射表
     * <desc/>
     * @param   floorConfigList 待更新的楼层映射表集
     * @author Biao.R
     * @createDate 2017/12/20
     */
    void batchUpdate(List<DeviceElevatorFloorConfigPO> floorConfigList);

    /**
     * <desc>
     *      根据条件查询用于展示的电梯楼层信息
     *      （注：若由楼层服务范围，则按服务范围查询。先查询logicFloor,没有则查询floorNum,再没有，则查询naturalFloor）
     * <desc/>
     * @param  param    查询条件
     * @return  用于展示的楼层信息，多条用英文，风格 如 -2，-1，1，***
     * @author Biao.R
     * @createDate 2017/12/29
     */
    List<DeviceElevatorFloorConfigPO> getShowFloor(Map<String, Object> param);

    /**
     * <desc>
     *      根据条件查询用于展示的电梯楼层信息
     *      （注：
     *      1.此处@Param("content")不可去掉，对应Mapper中会用到
     *      2.若由楼层服务范围，则按服务范围查询。先查询logicFloor,没有则查询floorNum,再没有，则查询naturalFloor
     *      3.params数据示例：(deviceUnique,naturalFloors)。此处键值对是设备唯一码和对应的naturalFloor，
     *      其中naturalFloor以英文逗号拼接。params中有多对键值对）
     * <desc/>
     * @param  params    查询条件
     * @return  用于展示的楼层信息，多条用英文，风格 如 -2，-1，1，***
     * @author Biao.R
     * @createDate 2018/01/11
     */
    List<PropertyElevatorFloorGetVO> getAllFloorByElevator(@Param("content") Map<String, String> params);

    /**
     * <desc>
     *      获取原始设备楼层对应表信息。
     * <desc/>
     *
     * @param  deviceUnique 设备唯一编号
     * @return
     * @author Juguang.S
     * @createDate 2018/08/22
     */
    List<CloudElevatorFloorInfoVO>  getFloorInfoList(@Param("deviceUnique") String deviceUnique,
                                                     @Param("maxNaturalFloor") String maxNaturalFloor,
                                                     @Param("minNaturalFloor") String minNaturalFloor);

    /**
     * <desc>
     *      更新电梯最大最小楼层
     * </desc>
     *
     * @param deviceUnique
     * @param maxFloor
     * @param minFloor
     * @return
     * @author Jiaqi.X
     * @createDate 2018/11/28
     */
    Integer updateElevatorMaxAndMinFloor(@Param("deviceUnique") String deviceUnique,
                                         @Param("maxFloor") Integer maxFloor,
                                         @Param("minFloor") Integer minFloor);

    /**
     * <desc>
     *      获取电梯的最大最小楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/12/06
     */
    Map<String,Integer> getElevatorFloorAround(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取电梯公共楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/08
     */
    String getCommonFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      更新电梯的公共楼层
     * </desc>
     *
     * @param deviceUnique
     * @param commonFloor
     * @return
     * @author Jiaqi.X
     * @createDate 2019/01/08
     */
    Integer updateCommonFloor(@Param("deviceUnique") String deviceUnique, @Param("commonFloor") String commonFloor);

    /**
     * <desc>
     *      查询云电梯楼层映射信息
     * </desc>
     *
     * @param deviceUnique 设备序列号
     * @return 云电梯楼层映射信息
     * @author wangzhi
     * @createDate 2019/01/21
     */
    PropertyDeviceElevatorConfigVO getDeviceElevatorConfig(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      更新一卡通上传的楼层信息
     * </desc>
     *
     * @param deviceElevatorFloorConfigPO
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/02
     */
    Integer updateFloorRelationForSmartCard(DeviceElevatorFloorConfigPO deviceElevatorFloorConfigPO);

    /**
     * <desc>
     *      只更新一卡通上传的端子号信息
     * </desc>
     *
     * @param deviceElevatorFloorConfigPO
     * @return
         * @author Juguang.S
     * @createDate 2021/01/31
     */
    Integer updateFloorRelationByTerminalFloorForSmartCard(DeviceElevatorFloorConfigPO deviceElevatorFloorConfigPO);
}